import UIKit

@available(iOS 2.0, *)
extension QKC where AA :UIButton {
		// default is UIEdgeInsetsZero. On tvOS 10 or later, default is nonzero except for custom buttons.
    open func contentEdgeInsets_qk_s(_ contentEdgeInsets:  UIEdgeInsets ) -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		return link(next: contentEdgeInsets).then_QK { $0.value.contentEdgeInsets = contentEdgeInsets }
	}
    open func contentEdgeInsets_qk_g() -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		 self +^ self.value.contentEdgeInsets
	}

		// default is UIEdgeInsetsZero
    open func titleEdgeInsets_qk_s(_ titleEdgeInsets:  UIEdgeInsets ) -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		return link(next: titleEdgeInsets).then_QK { $0.value.titleEdgeInsets = titleEdgeInsets }
	}
    open func titleEdgeInsets_qk_g() -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		 self +^ self.value.titleEdgeInsets
	}

		// default is NO. if YES, shadow reverses to shift between engrave and emboss appearance
    open func reversesTitleShadowWhenHighlighted_qk_s(_ reversesTitleShadowWhenHighlighted:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: reversesTitleShadowWhenHighlighted).then_QK { $0.value.reversesTitleShadowWhenHighlighted = reversesTitleShadowWhenHighlighted }
	}
    open func reversesTitleShadowWhenHighlighted_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.reversesTitleShadowWhenHighlighted
	}

		// default is UIEdgeInsetsZero
    open func imageEdgeInsets_qk_s(_ imageEdgeInsets:  UIEdgeInsets ) -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		return link(next: imageEdgeInsets).then_QK { $0.value.imageEdgeInsets = imageEdgeInsets }
	}
    open func imageEdgeInsets_qk_g() -> QKC<AA,YY,ZZ, UIEdgeInsets >{
		 self +^ self.value.imageEdgeInsets
	}

		// default is YES. if YES, image is drawn darker when highlighted(pressed)
    open func adjustsImageWhenHighlighted_qk_s(_ adjustsImageWhenHighlighted:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: adjustsImageWhenHighlighted).then_QK { $0.value.adjustsImageWhenHighlighted = adjustsImageWhenHighlighted }
	}
    open func adjustsImageWhenHighlighted_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.adjustsImageWhenHighlighted
	}

		// default is YES. if YES, image is drawn lighter when disabled
    open func adjustsImageWhenDisabled_qk_s(_ adjustsImageWhenDisabled:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: adjustsImageWhenDisabled).then_QK { $0.value.adjustsImageWhenDisabled = adjustsImageWhenDisabled }
	}
    open func adjustsImageWhenDisabled_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.adjustsImageWhenDisabled
	}

		// default is NO. if YES, show a simple feedback (currently a glow) while highlighted
    open func showsTouchWhenHighlighted_qk_s(_ showsTouchWhenHighlighted:  Bool ) -> QKC<AA,YY,ZZ, Bool >{
		return link(next: showsTouchWhenHighlighted).then_QK { $0.value.showsTouchWhenHighlighted = showsTouchWhenHighlighted }
	}
    open func showsTouchWhenHighlighted_qk_g() -> QKC<AA,YY,ZZ, Bool >{
		 self +^ self.value.showsTouchWhenHighlighted
	}

		// The tintColor is inherited through the superview hierarchy. See UIView for more information.
    @available(iOS 5.0, *)
    open func tintColor_qk_s(_ tintColor:  UIColor ) -> QKC<AA,YY,ZZ, UIColor >{
		return link(next: tintColor).then_QK { $0.value.tintColor = tintColor }
	}
    @available(iOS 5.0, *)
    open func tintColor_qk_g() -> QKC<AA,YY,ZZ, UIColor >{
		 self +^ self.value.tintColor
	}

    open func buttonType_qk_g() -> QKC<AA,YY,ZZ, UIButton.ButtonType >{
		 self +^ self.value.buttonType
	}

	/// Enables this button's built-in pointer interaction.
    @available(iOS 13.4, *)
    open func isPointerInteractionEnabled_qk_s(_ isPointerInteractionEnabled:  Bool) -> QKC<AA,YY,ZZ, Bool>{
		return link(next: isPointerInteractionEnabled).then_QK { $0.value.isPointerInteractionEnabled = isPointerInteractionEnabled }
	}
    @available(iOS 13.4, *)
    open func isPointerInteractionEnabled_qk_g() -> QKC<AA,YY,ZZ, Bool>{
		 self +^ self.value.isPointerInteractionEnabled
	}

	/**
     * @abstract Called when the system pointer hovers over this button if its pointer interaction is enabled. The
     *           system calls this block with a proposed UIPointerEffect and UIPointerShape. You may use them to construct
     *           a customized version of the system provided style or return an entirely custom one.
     */
    @available(iOS 13.4, *)
    open func __pointerStyleProvider_qk_s(_ __pointerStyleProvider:  UIButtonPointerStyleProvider?) -> QKC<AA,YY,ZZ, UIButtonPointerStyleProvider?>{
		return link(next: __pointerStyleProvider).then_QK { $0.value.__pointerStyleProvider = __pointerStyleProvider }
	}
    @available(iOS 13.4, *)
    open func __pointerStyleProvider_qk_g() -> QKC<AA,YY,ZZ, UIButtonPointerStyleProvider?>{
		 self +^ self.value.__pointerStyleProvider
	}

	// that don't have their own image defined.
		// normal/highlighted/selected/disabled. can return nil
    open func currentTitle_qk_g() -> QKC<AA,YY,ZZ, String? >{
		 self +^ self.value.currentTitle
	}

		// normal/highlighted/selected/disabled. always returns non-nil. default is white(1,1)
    open func currentTitleColor_qk_g() -> QKC<AA,YY,ZZ, UIColor >{
		 self +^ self.value.currentTitleColor
	}

		// normal/highlighted/selected/disabled.
    open func currentTitleShadowColor_qk_g() -> QKC<AA,YY,ZZ, UIColor? >{
		 self +^ self.value.currentTitleShadowColor
	}

		// normal/highlighted/selected/disabled. can return nil
    open func currentImage_qk_g() -> QKC<AA,YY,ZZ, UIImage? >{
		 self +^ self.value.currentImage
	}

		// normal/highlighted/selected/disabled. can return nil
    open func currentBackgroundImage_qk_g() -> QKC<AA,YY,ZZ, UIImage? >{
		 self +^ self.value.currentBackgroundImage
	}

		// normal/highlighted/selected/disabled. can return nil
    @available(iOS 13.0, *)
    open func currentPreferredSymbolConfiguration_qk_g() -> QKC<AA,YY,ZZ, UIImage.SymbolConfiguration? >{
		 self +^ self.value.currentPreferredSymbolConfiguration
	}

		// normal/highlighted/selected/disabled. can return nil
    @available(iOS 6.0, *)
    open func currentAttributedTitle_qk_g() -> QKC<AA,YY,ZZ, NSAttributedString? >{
		 self +^ self.value.currentAttributedTitle
	}

	// return title and image views. will always create them if necessary. always returns nil for system buttons
    @available(iOS 3.0, *)
    open func titleLabel_qk_g() -> QKC<AA,YY,ZZ, UILabel? >{
		 self +^ self.value.titleLabel
	}

    @available(iOS 3.0, *)
    open func imageView_qk_g() -> QKC<AA,YY,ZZ, UIImageView? >{
		 self +^ self.value.imageView
	}

	// by other states which don't have a custom value set
		// default is nil. title is assumed to be single line
    open func setTitle_qk_f(_ title: String?, for state: UIControl.State) -> QKC<AA,YY,ZZ, String?>{
		 self +^ self.value.setTitle(title, for:state) +^ title
	}

		// default is nil. use opaque white
    open func setTitleColor_qk_f(_ color: UIColor?, for state: UIControl.State) -> QKC<AA,YY,ZZ, UIColor?>{
		 self +^ self.value.setTitleColor(color, for:state) +^ color
	}

		// default is nil. use 50% black
    open func setTitleShadowColor_qk_f(_ color: UIColor?, for state: UIControl.State) -> QKC<AA,YY,ZZ, UIColor?>{
		 self +^ self.value.setTitleShadowColor(color, for:state) +^ color
	}

		// default is nil. should be same size if different for different states
    open func setImage_qk_f(_ image: UIImage?, for state: UIControl.State) -> QKC<AA,YY,ZZ, UIImage?>{
		 self +^ self.value.setImage(image, for:state) +^ image
	}

		// default is nil
    open func setBackgroundImage_qk_f(_ image: UIImage?, for state: UIControl.State) -> QKC<AA,YY,ZZ, UIImage?>{
		 self +^ self.value.setBackgroundImage(image, for:state) +^ image
	}

    @available(iOS 13.0, *)
    open func setPreferredSymbolConfiguration_qk_f(_ configuration: UIImage.SymbolConfiguration?, forImageIn state: UIControl.State) -> QKC<AA,YY,ZZ, UIImage.SymbolConfiguration?>{
		 self +^ self.value.setPreferredSymbolConfiguration(configuration, forImageIn:state) +^ configuration
	}

		// default is nil. title is assumed to be single line
    @available(iOS 6.0, *)
    open func setAttributedTitle_qk_f(_ title: NSAttributedString?, for state: UIControl.State) -> QKC<AA,YY,ZZ, NSAttributedString?>{
		 self +^ self.value.setAttributedTitle(title, for:state) +^ title
	}

		// these getters only take a single state value
    open func title_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,String? >{
		 self +^ self.value.title(for:state)
	}

    open func titleColor_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,UIColor?>{
		 self +^ self.value.titleColor(for:state)
	}

    open func titleShadowColor_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,UIColor?>{
		 self +^ self.value.titleShadowColor(for:state)
	}

    open func image_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,UIImage?>{
		 self +^ self.value.image(for:state)
	}

    open func backgroundImage_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,UIImage?>{
		 self +^ self.value.backgroundImage(for:state)
	}

    @available(iOS 13.0, *)
    open func preferredSymbolConfigurationForImage_qk_f(in state: UIControl.State) -> QKC<AA,YY,ZZ,UIImage.SymbolConfiguration?>{
		 self +^ self.value.preferredSymbolConfigurationForImage(in:state)
	}

    @available(iOS 6.0, *)
    open func attributedTitle_qk_f(for state: UIControl.State) -> QKC<AA,YY,ZZ,NSAttributedString?>{
		 self +^ self.value.attributedTitle(for:state)
	}

	// are rendered in separate subviews (UIImageView, UILabel)
    open func backgroundRect_qk_f(forBounds bounds: CGRect) -> QKC<AA,YY,ZZ,CGRect>{
		 self +^ self.value.backgroundRect(forBounds:bounds)
	}

    open func contentRect_qk_f(forBounds bounds: CGRect) -> QKC<AA,YY,ZZ,CGRect>{
		 self +^ self.value.contentRect(forBounds:bounds)
	}

    open func titleRect_qk_f(forContentRect contentRect: CGRect) -> QKC<AA,YY,ZZ,CGRect>{
		 self +^ self.value.titleRect(forContentRect:contentRect)
	}

    open func imageRect_qk_f(forContentRect contentRect: CGRect) -> QKC<AA,YY,ZZ,CGRect>{
		 self +^ self.value.imageRect(forContentRect:contentRect)
	}

}

@available(iOS 13.4, *)
extension QKC where AA :UIButton {
    public func pointerStyleProvider_qk_s(_ pointerStyleProvider:  UIButton.PointerStyleProvider?) -> QKC<AA,YY,ZZ, UIButton.PointerStyleProvider?>{
		return link(next: pointerStyleProvider).then_QK { $0.value.pointerStyleProvider = pointerStyleProvider }
	}
    public func pointerStyleProvider_qk_g() -> QKC<AA,YY,ZZ, UIButton.PointerStyleProvider?>{
		 self +^ self.value.pointerStyleProvider
	}

}

